阿里云通过 Docker 启动服务后, 无法ssh访问主机

问题

阿里云测试环境, 相同域网下 A, B 两台机器, 开通全部端口权限, 主机网段 192.168.10.0/24.
A 机器使用 docker 搭建服务, 于端口 http 3000 端口.
使用 A 和 B 机器直接访问 http://A:3000 均可以正常返回数据.
使用本地 pc 机访问提示超时, 但是 ping A 和访问 A 机器非 Docker 启动的服务都正常.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// A 机器
$ curl 'http://A:3000'
Hello World

// B 机器
$ curl 'http://A:3000'
Hello World

// PC 机器
$ curl 'http://A:3000'
curl: (7) Failed to connect to A port 3000: Operation timed out

// PC 机器
$ ping A
PING A (A): 56 data bytes
64 bytes from A: icmp_seq=0 ttl=63 time=283.761 ms
64 bytes from A: icmp_seq=1 ttl=63 time=74.748 ms

我们当前的情况

我们链接服务器是使用 vpn 的, 无法在没有 vpn 前提下直接链接服务器地址.

我们 vpn 机器所在的网段, 恰好和 docker0 所在的网段相同. 造成使用 vpn 访问 A 机器时没有问题, 但是访问 A 机器中 docker 服务无法成功.

解决方案

修改 docker0 所在网段

vim /etc/docker/daemon.json

1
{ "bip": "172.18.0.0/24" }

修改 bridge 所在网段

vim docker-compose.yml

1
2
3
4
5
6
7
networks:
localnet:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.19.0.0/24

重启使服务生效

关闭服务

关闭服务 docker-compose down

关闭 docker 后台进程 sudo systemctl restart docker

清理不用的网桥

查看当前网桥 ifconfig

删除当前不用的网桥 sudo ifconfig br-318be2a90259 down

开启服务

启动 docker 后台进程 sudo systemctl start docker

启动服务 docker-compose up -d

查看更新后的网络

查看当前网桥 ifconfig

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.